package com.gitee.deeround.jdbchelper.core;

import com.gitee.deeround.jdbchelper.in.SqlParameter;

import java.util.List;

/**
 * 数据库操作增删改存储过程
 *
 * @author deeround
 * @date 2024/03/29
 */
public interface DbActionExecute {


    //================execute(可执行存储过程)===================

    /**
     * 执行SQL或存储过程
     *
     * @param sql SQL/存储过程
     * @return SQL返回受影响的行数，存储过程返回-1
     */
    int execute(String sql);

    /**
     * 执行SQL或存储过程
     *
     * @param sql  SQL/存储过程
     * @param args 参数
     * @return SQL返回受影响的行数，存储过程返回-1
     */
    int execute(String sql, List<SqlParameter> args);

    /**
     * 批量执行SQL或存储过程
     *
     * @param sqls SQL/存储过程
     * @return SQL返回受影响的行数，存储过程返回-1
     */
    int[] batchExecute(List<String> sqls);


    //================delete===================

    /**
     * 删除
     *
     * @param tableName   表名
     * @param columnName  字段名
     * @param columnValue 字段值
     * @return 返回受影响的行数
     */
    int delete(String tableName, String columnName, Object columnValue);

    /**
     * 批量删除
     *
     * @param tableName   表名
     * @param columnName  字段名
     * @param columnValue 字段值
     * @return 返回受影响的行数
     */
    int delete(String tableName, String columnName, List<Object> columnValue);


    //================insert/update/delete===================

    /**
     * 执行增删改
     *
     * @param sql SQL
     * @return 返回受影响的行数
     */
    int update(String sql);

    /**
     * 执行增删改
     *
     * @param sql  SQL
     * @param args 参数
     * @return 返回受影响的行数
     */
    int update(String sql, Object[] args);

    /**
     * 批量执行多条语句
     *
     * @param sqls SQL
     * @return 返回受影响的行数
     */
    int[] batchUpdate(List<String> sqls);

    /**
     * 批量执行多条语句
     *
     * @param sqls  SQL
     * @param batch 每次批量执行数
     * @return 返回受影响的行数
     */
    int[] batchUpdate(List<String> sqls, int batch);

    /**
     * 单条语句批量对象执行
     *
     * @param sql  SQL
     * @param args 批量对象参数
     * @return 返回受影响的行数
     */
    int[] batchUpdate(String sql, List<Object[]> args);

    /**
     * 单条语句批量对象执行
     *
     * @param sql   SQL
     * @param args  批量对象参数
     * @param batch 每次批量执行数
     * @return 返回受影响的行数
     */
    int[] batchUpdate(String sql, List<Object[]> args, int batch);


}
